// DataHelper类 - 负责 localStorage 操作
class DataHelper {
  dataKey: string; // loacalStorage的键
  primaryKey: string; // 数据项主键名称

  constructor(dataKey: string, primaryKey: string) {
    this.dataKey = dataKey;
    this.primaryKey = primaryKey;
  }

  // 1. 读取全部数据，返回数组（如果没有读到数据就返回空数组）-------------------------
  readData(): any {
    // 1. 读取本地数据（根据dateKey）
    let strData: string | null = localStorage.getItem(this.dataKey);
    // 2. 将读取的json数组字符串转换成数组对象
    let arrData: any = [];
    if (strData != null) {
      arrData = JSON.parse(strData);
    }
    // 3. 返回数组对象
    return arrData;
  }

  //2. 存入数据-------------------------------------------------------------------
  saveData(arrData: Array<Object>): void {
    let str: string = JSON.stringify(arrData);
    localStorage.setItem(this.dataKey, str);
  }

  // 3. 新增数据------------------------------------------------------------------
  addData(newDataObj: any): number {
    let dataArray = this.readData();
    if (dataArray == null) {
      dataArray = [];
    }

    // 自动生成 主键值 (id 值)
    //  如果 数组 长度 > 0，则 将 最后一个 元素的 id 值 取出 + 1 作为 新元素的 id值
    //               <= 0, 则 将 1 作为 新元素的 id 值
    // let preId: string = dataArray[dataArray.length - 1][this.primaryKey]
    // console.log(preId)
    let newId =
      dataArray.length > 0
        ? dataArray[dataArray.length - 1][this.primaryKey] + 1
        : 1;
    // 上面的应该是个类数组，dataArray[dataArray.length -1]，获取数组最后一个元素
    // 后面在dataArray[dataArray.length -1][this.primaryKey]+1，最后一个元素的数据项主键名称（id ）
    newDataObj[this.primaryKey] = newId;

    dataArray.push(newDataObj);

    this.saveData(dataArray);

    return newId;
  }

  // 4. 删除数据------------------------------------------------------------------
  removeDataById(id: string | number): boolean {
    let arr = this.readData();
    // findIndex()查找数组index,splice()删除数组中的元素
    let index = arr.findIndex((item: any) => item[this.primaryKey] == id);
    if (index > -1) {
      arr.splice(index, 1);
      this.saveData(arr);
      return true;
    }
    return false;
  }
}

export default DataHelper;
